package com.example.FinalKeyword;

// final 修饰变量或字段
public class FinalVariableExample {
    // final修饰的实例变量 - 声明时初始化,值不能改变
    private final int MAX_COUNT = 100;

    // final修饰的实例变量 - 构造方法中初始化
    private final String APP_NAME;

    // final修饰的静态变量（常量）
    public static final double PI = 3.14159;

    // 构造方法
    public FinalVariableExample(String appName) {
        this.APP_NAME = appName;  // 在构造方法中初始化final实例变量
        // final实例变量必须在构造方法结束前完成初始化
    }

    public void demonstrateFinalVariables() {
        // final局部变量
        final String GREETING = "Hello";  // final局部变量，声明时初始化

        System.out.println("MAX_COUNT: " + MAX_COUNT);  // 输出final实例变量
        System.out.println("APP_NAME: " + APP_NAME);    // 输出final实例变量
        System.out.println("PI: " + PI);                // 输出final静态常量
        System.out.println("GREETING: " + GREETING);    // 输出final局部变量

        // 以下代码如果取消注释会编译错误：
        // MAX_COUNT = 200;      // 错误：不能修改final实例变量的值
        // APP_NAME = "NewApp";  // 错误：不能修改final实例变量的值
        // PI = 3.14;            // 错误：不能修改final静态常量的值
        // GREETING = "Hi";      // 错误：不能修改final局部变量的值
    }

    public static void main(String[] args) {
        FinalVariableExample example = new FinalVariableExample("MyApplication");
        example.demonstrateFinalVariables();
    }
}
/*
运行结果：
MAX_COUNT: 100
APP_NAME: MyApplication
PI: 3.14159
GREETING: Hello
*/